core: use specialization for more methods of impl Iterator for &mut I
#138862
+571
−295
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
...and get rid of
ByRefSized
. Most of the iterator methods can be forwarded to the inner iterator if we know that it isSized
, but this is currently only done forfold
andtry_fold
. This PR adds the optimization for all applicable methods. It uses two private helper struct to hide the specialization from the public API:Iterator for ByRefDefault
only forwards the methods that can be used even when the iterator is notSized
, all other methods are left to the default.Iterator for ByRef
specializes onSized
and forwards to either the underlying iterator or toByRefDefault
This PR also removes
ByRefSized
, theIterator for &mut I
should now be good enough to be used everywhere.